package com.henryliu.homework1_3;

import java.util.*;

/*
    3.使用集合实现斗地主游戏的部分功能，要求如下：

    （1）首先准备 54 张扑克牌并打乱顺序。

    （2）由三个玩家交替摸牌，每人 17 张扑克牌，最后三张留作底牌。

    （3）查看三个玩家手中的扑克牌和底牌。

    （4）其中玩家手中的扑克牌需要按照大小顺序打印，规则如下：

        手中扑克牌从大到小的摆放顺序：大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3
 */

public class QuestionThree {

    public static void main(String[] args) {

        //声明ArrayList集合用于存放54张“牌”
        List<String> list = new ArrayList<>();
        prepare(list);
        Collections.shuffle(list);  //调用shuffle方法使用默认的随机源随机置换指定的列表

        //分别声明三个ArrayList用于存放三个玩家的“牌”，然后使用循环依次“发牌”一张，直到牌堆集合中只剩三张牌
        List<String> player1 = new ArrayList<>();
        List<String> player2 = new ArrayList<>();
        List<String> player3 = new ArrayList<>();
        while(list.size() > 3) {
            player1.add(list.remove(0));    //使用remove不断删除0号位的对象，依次“发给”三个玩家
            player2.add(list.remove(0));
            player3.add(list.remove(0));
        }

        //使用指定排序规则排序后打印
        sort(player1);
        sort(player2);
        sort(player3);
        show("玩家1的牌为", player1);
        show("玩家2的牌为", player2);
        show("玩家3的牌为", player3);
        show("底牌为", list);
    }
    //将各种对应数量的“牌”放入集合中
    public static void prepare(List<String> l) {
        l.add("大王");
        l.add("小王");
        setV(l,"2");
        setV(l,"A");
        setV(l,"K");
        setV(l,"Q");
        setV(l,"J");
        for(int i = 3; i < 11; i++) {
            setV(l,"" + i);
        }
    }
    //重复放入字符串四次
    public static void setV(List<String> l, String s) {
        for (int j = 0; j < 4; j++) {
            l.add(s);
        }
    }
    //初始化HashMap，给每种字符串给定一个Integer类型的序号以便排序
    public static void initHashMap(HashMap<String, Integer> map) {
        map.put("大王", 15);
        map.put("小王", 14);
        map.put("2", 13);
        map.put("A", 12);
        map.put("K", 11);
        map.put("Q", 10);
        map.put("J", 9);
        for (int i = 0; i < 8; i++) {
            map.put("" + (i + 3), i + 1);
        }
    }
    //重写排序规则
    public static void sort(List<String> list) {
        HashMap<String, Integer> map = new HashMap<>();
        initHashMap(map);
        Comparator<String> comparator = (String s1, String s2) -> {
            return map.get(s2) - map.get(s1);
        };
        Collections.sort(list, comparator);
    }
    //打印
    public static void show(String s, List<String> list) {
        System.out.println(s + ":" + list);
    }
}
